R语言中的绘图系统
R语言中存在着3种不同的绘图系统:
- base:这是最早的绘图系统,这种绘图系统非常简单,容易上手,使用plot()函数就是这个系统的,但是很难绘出比较好看的图形。后来又开发了grid绘图系统,当时开发grid绘图系统时,是为了修改base中的一些限制,从而使用绘图更为灵活。
- lattice:中文名称是晶格,格子的意思。lattice绘图系统是建立在grid系统之上的。它有grid不具备的两个特点:①每个绘图的结果都能被保存到一个变量中,而不仅仅是绘制在屏幕上。这表明用户可以先画出一些图形,再对其进行编辑,然后再把它画出来。②可在一个格子中包含多个面板,因此可以将图形分成不同的类别,并比较各级之间的差异。
- ggplot2:这个gg指的是grammar of graphics,这种绘图系统的目标在于把图形分解成不同的组块。
lattice绘图系统简要
lattice
绘图系统中对应的plot函数是xyplot,它使用了一个公式接口来指定x和y坐标变量,绘图效果如下所示:
|
|
它的很多参数与base系统中的基本一致,如下所示:
|
|
ggplot2绘图系统
在ggplot2绘图系统中,每个绘图都由ggplot
函数创建,它的第一个参数是数据框,第二个参数是aesthetic,这个参数其实就是把x和y列变量传递给aes
函数,最后再添加一个geom_
这种形式的参数,让图形显示出一些点,如下所示:
|
|
绘图数据集
我们用的数据集是obama_vs_mccain
,这个数据集中的信息是2008年美国大选的数据,位于learningr
包中,如下所示:
|
|
绘图结果如下所示:
修改绘图参数
ggplot2可以识别base中的图形系统的命令来改变点的颜色和形状,也有自己的绘图参数,现在将代码修改为以下内容:
|
|
设置对数坐标
如果要将坐标以对数的形式进行设置,可以添加scale_x_log10
与scale_y_log10
参数,参数内的参数是breaks
,它表示的是意思是指定刻度值的位置,代码修改为:
|
|
图形的分面
使用切面(facet)可以将图形分割为不同的面板,此时需要添加的函数是facet_wrap
,如下所示
|
|
将图形储存在变量中
ggplot2可以将图形存储在变量中,然后继续往这个变量中添加新的函数,如下所示:
|
|
如果要显示其输出,直接输入print(gg1)
或gg1
即可:
|
|
或者是继续往里面添加函数,如下所示:
|
|
绘制线图
现在使用ggplot2来绘制一下线图,使用的数据是learningr
包中的crab_tag
数据集,这个数据集记录了2008年和2009年,蟹类的迁移深度与温度。
|
|
在绘制多条线条时有一点复杂,当在ggplot中指定aesthetics时,用户是为所有的geom都指定了这个aesthetics,也就是说,aesthetics对绘图的影响来说是“全局的”,在下面的案例中,我们希望在一条线上指定最大深度,在另外一条线上指定最小深度,代码如下所示:
|
|
而在实际操作中,通常不采用这种方法,而是使用reshape2包中的melt函数处理一下数据,如下所示:
|
|
再来查看一下原始数据与经melt处理后的数据:
|
|
第二修改后的图形还不好看,因为两条线颜色是相同的,我们可以使用geom_ribbon
来美化一下,使最大值与最小值之间进行填充,如下所示:
|
|
绘制直方图
这里还用learningr
包中的obama_vs_mccain
数据集,如下所示:
|
|
通过传递特殊的名字,例如..count..
或..density..
到y-aesthetic
中来可以计数或密度,现在我们使用..density..
参数,注意看y轴的坐标:
|
|
箱线图
|
|
条形图
|
|
参考资料
- 学习R.[美] Richard,Cotton 著刘军 译